<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>
    // 1. 封装 数组去重 的函数
    //     - 一个数组内，有很多重复数据，去掉重复数据，要求每个数据都不重复
    //     - [6,5,7,4,8,3,4,5,6,7,5,4,3]
    //     - [6,5,7,4,8,3]
    
    // 依次遍历老数组中所有数据，遇到一个数据，记录一个数据，再遇到重复的数据，不记录

    function noRepeat(a){
        // 创建一个新数组用于记录遇到的数据
        var newArr = [];
        // 遍历老数组
        for(var i=0;i<a.length;i++){
            // 在新数组中判断是否已经存在老数组的这个数据了
            if(newArr.indexOf( a[i] ) === -1){
                // 如果不存在，那就记录到新数组中
                newArr.push( a[i] );
            }
        }
        // 返回用于记录的新数组
        return newArr;
    }
    // var arr = [6,5,7,4,8,3,4,5,6,7,5,4,3];
    // console.log(arr);
    // var res = noRepeat(arr);
    // console.log(res);
    // console.log(arr);
    
    // 2. 封装 判断是否是回文数组 的函数
    //     - [1,2,3,4,5,4,3,2,1]
    //     - [1,2,3,4,4,3,2,1]

    function palindrome(a){
        // 取出中间值
        var center = parseInt(a.length/2);
        
        // 比较规则
        // 0 ~ length-1-0
        // 1 ~ length-1-1
        // 2 ~ length-1-2
        // center ~ length-1-center
        // ...
        // i ~ length-1-i

        for(var i=0;i<=center;i++){
            // 只要有一个不等于，就是非回文数组
            if(a[i] !== a[a.length-1-i]){
                return false;
            }
        }
        // 循环执行完毕后，没有找到不相等的，说明全部相等，是回文数组
        return true;
    }
    // var arr1 = [1,2,3,4,5,4,3,2,1];
    // var arr2 = [1,2,3,4,5,6,4,3,2,1];
    // var arr3 = [1,2,3,4,4,3,2,1];
    // var res1 = palindrome(arr1);
    // var res2 = palindrome(arr2);
    // var res3 = palindrome(arr3);
    // console.log(res1);
    // console.log(res2);
    // console.log(res3);



    // 3. 封装 根据指定参数生成 n * m 的二维数组，根据参数设置数组的每个数据（重复）， 的函数
    //     - createArray(5, 3, "hello")

    function createArr(n, m, data){
        // 创建大数组
        var arr = [];
        for(var i=0;i<n;i++){
            // 多次创建小数组
            var sArr = [];
            for(var j=0;j<m;j++){
                // 多次向小数组内添加数据
                sArr.push(data);
            }
            // 将小数组添加到大数组中
            arr.push(sArr);
        }
        return arr;
    }
    // var arr = createArr(5, 3, "hello");
    // console.log(arr);

    // 4. 封装 传入一个数值数组，计算平均值 的函数

    function avg(a){
        // 求和，除以长度

        // var sum = 0;
        // for(var i=0;i<a.length;i++){
        //     sum += a[i];
        // }
        // return sum/a.length;

        return a.reduce(function(prev,val){
            return prev + val;
        }) / a.length;
    }

    var arr = [4,5,6,7,8];
    var res = avg(arr);
    console.log(res);

</script>
</html>